package org.pb.system.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.pb.basic.utils.AjaxResult;
import org.pb.basic.utils.PageList;
import org.pb.system.domain.SystemDictionaryType;
import org.pb.system.query.SystemDictionaryTypeQuery;
import org.pb.system.service.ISysDicTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 数据字典对应的控制器
 * @author
 */
@RestController
@RequestMapping("/sysdictype")
@Api(tags = "数据字典的api接口", description = "接口功能的详细描述")
public class SysDicTypeController {

    @Autowired
    private ISysDicTypeService sysDicTypeService;

    /**
     * 获取到数据字典的所有数据
     * @return 数据字典的所有信息
     */
    @GetMapping
    @ApiOperation(value = "获取到所有的数据字典明细信息", notes = "得到一个存有所有数据字典明细信息的json数据")
    public List<SystemDictionaryType> findAll() {
        return sysDicTypeService.findAll();
    }

    /**
     * 根据id获取对应的单条信息
     * 通过url传递到对应的参数，通过@PathVariable注解获取到对应的参数
     * @param id 要查询的数据的id
     * @return 返回对应的单挑记录
     */
    @GetMapping("/{id}")
    @ApiOperation(value = "通过id获取到对应的数据信息", notes = "将要查询的参数id拼接到请求的url地址后，得到对应的id的数据信息")
    public SystemDictionaryType getOne(@PathVariable("id") Long id) {
        return sysDicTypeService.getById(id);
    }

    /**
     * 根据id删除对应的记录
     * @param id 要删除的信息的id
     * @return 返回删除执行结果
     */
    @DeleteMapping("/{id}")
    @ApiOperation(value = "删除对应id的数据信息", notes = "将要删除的数据id拼接到请求url后，返回操作成功与否的结果")
    public AjaxResult remove(@PathVariable("id") Long id) {
        try {
            // 执行删除命令
            sysDicTypeService.remove(id);
            // 如果正常执行，表示命令执行成功
            return AjaxResult.successWithMessage("删除成功");
        } catch (Exception e) {
            e.printStackTrace();
            // 如果抛出异常，则表示删除失败
            return AjaxResult.failedWithMessage(e.getMessage());
        }
    }

    /**
     * 根据传入参数的id有无，进行添加或者修改操作
     * 根据请求体传参，根据@RequestBody注解获取参数
     * @param systemDictionaryType 要添加或者修改的数据信息
     * @return 返回添加或者修改的执行结果
     */
    @PutMapping
    @ApiOperation(value = "根据条件修改对应的信息", notes = "条件存放于请求体中，如果有id就是修改，没有就是添加，最后返回执行结果")
    public AjaxResult saveOrUpdate(@RequestBody SystemDictionaryType systemDictionaryType) {
        try {
            // 判断参数中的id是否存在
            if (systemDictionaryType.getId() == null) {
                // 如果id不存在，则表示为添加请求
                sysDicTypeService.save(systemDictionaryType);
            } else {
                // 如果id存在，表示为修改请求
                sysDicTypeService.update(systemDictionaryType);
            }
            // 如果没有出现异常，则表示保存成功
            return AjaxResult.successWithMessage("保存成功");
        } catch (Exception e) {
            e.printStackTrace();
            // 如果出现异常，则表示保存失败
            return AjaxResult.failedWithMessage(e.getMessage());
        }
    }

    /**
     * 根据查询条件分页查询数据
     * @param query 插叙条件对应的参数实例
     * @return 返回查询到的记录列表
     */
    @PostMapping
    @ApiOperation(value = "根据分页条件查询对应的数据信息", notes = "返回对应的数据列表和总条数信息")
    public PageList<SystemDictionaryType> findByQuery(@RequestBody SystemDictionaryTypeQuery query) {
        try {
            PageList<SystemDictionaryType> list = sysDicTypeService.findByQuery(query);
            return list;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    @PatchMapping
    @ApiOperation(value = "批量删除数据", notes = "根据传入的id数组，删除对应的数据")
    public AjaxResult batchRemove(@RequestBody List<Long> ids) {
        try {
            // 执行批量删除命令
            sysDicTypeService.batchRemove(ids);
            // 如果没有异常，则表示执行成功
            return AjaxResult.successWithMessage("删除成功");
        } catch (Exception e) {
            e.printStackTrace();
            // 如果抛出异常，则证明删除失败
            return AjaxResult.failedWithMessage(e.getMessage());
        }
    }

}
